import bdb

from flask import Response, jsonify, Flask, request, Blueprint,url_for
from configs import *
from modules.Tables import *
from sqlalchemy import func

# 创建蓝图，对应的register目录（激活操作视图）
resource_view = Blueprint('resource', __name__)


# 算力资源展示
@resource_view.route('/resource_data', methods=['GET'])
@jwt_required()
def resource_data():
    # 查找设备全部信息并将结果转换为字典列表
    resource_list = convert_folder_to_dict_list(
        db.session.query(Resource_usage).all(),
        ['id', 'dev_ip', 'dev_id', 'board_temp', 'chip_temp', 'dev_get_sn', 'dev_get_target',
         'mem_used_mem_total', 'memory_usage_rate', 'tpu_util', 'resource_num'])

    # 组装数据 -- 将 dev_get_sn 和 dev_get_target 组合为字符串作为 key 并分组
    grouped_data = {}
    for resource in resource_list:
        # 将 dev_get_sn 和 dev_get_target 组合为一个字符串
        # key = f"{resource['dev_get_target']}-{resource['dev_get_sn']}"  # 这里用字符串拼接
        key = f"{'YGSJ-TPU'}-{resource['dev_get_sn']}"  # 这里用字符串拼接
        if key not in grouped_data:
            grouped_data[key] = []
        grouped_data[key].append(resource)


    return jsonify({'code':200,'msg':'查询成功','data':grouped_data})


# 算力资源展示
@resource_view.route('/rere', methods=['GET'])
@jwt_required()
def rere():
    # 获取算力信息配置id
    resource_id = request.args.get('resource_id')
    # 去算力信息表查找该信息数量
    res = db.session.query(Resource_usage).filter(Resource_usage.id==resource_id).first()
    if res:
        # 当数据存在，判断占用率是否超过80%或配置算法数量是否大于4
        if res.resource_num > 4 or float(res.memory_usage_rate.rstrip('%')) >= 85:
            print('当前算力卡占用率已满！')
        else:
            # 配置算力卡信息，然后算法配置数据写入
            # 配置add


            # 查找该算力卡id在算法配置中占用数量，写入算力信息表中
            resource_num = db.session.query(Algorithm_config).filter(Algorithm_config.resource_id == resource_id).count()
            print(resource_num)


            # 算力卡配置数量修改
            db.session.query(Resource_usage).filter(Resource_usage.id == resource_id).update({'resource_num':resource_num})
            db.session.commit()

    return jsonify({'code':200,'msg':'123'})